﻿using System;
using System.Data;
using System.Web;
using HtmlAgilityPack;

namespace WEATHER.Components
{
    public enum MeteorWeatherType
    {
        /// <summary>
        /// Thời tiết đất liền 24H
        /// </summary>
        ThoiTietDatLien24H,
        /// <summary>
        /// Thời tiết biển 24H
        /// </summary>
        ThoiTietBien24H,
        /// <summary>
        /// Dự báo 10 ngày
        /// </summary>
        DuBao10Ngay,
        /// <summary>
        /// Dự báo tháng
        /// </summary>
        DuBaoThang,
        /// <summary>
        /// Dự báo mùa
        /// </summary>
        DuBaoMua
    }

    public class Meteor
    {
        public static string GetWeatherOffline(Guid moduleID, MeteorWeatherType weatherType, ref DateTime recent)
        {
            string result = "Không lấy được dữ liệu";
            recent = new DateTime(1900, 1, 1);
            //Lấy dữ liệu từ database
            DataSet ds = Item.SelectTopBy_WeatherType(moduleID, weatherType.ToString(), 1);
            if (ds.Tables[0].Rows.Count > 0)
            {
                result = ds.Tables[0].Rows[0]["HtmlContent"].ToString();
                recent = DateTime.Parse(ds.Tables[0].Rows[0]["CreatedDate"].ToString());
            }
            return result;
        }

        public static string GetWeatherOnline(Guid moduleID, MeteorWeatherType weatherType)
        {
            //Lấy dữ liệu từ database
            DateTime recent = new DateTime(1900, 1, 1);

            string htmlContent = GetWeatherOffline(moduleID, weatherType, ref recent);
            DateTime now = DateTime.Now;
            TimeSpan ts = now.Subtract(recent);
            if (ts.TotalMinutes >= 60)
            {
                try
                {
                    // Lấy dữ liệu từ website http://www.nchmf.gov.vn/
                    string url;
                    int type;
                    string weathertitle;

                    switch (weatherType)
                    {
                        case MeteorWeatherType.ThoiTietDatLien24H:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/79/12/Default.aspx";
                            type = 1;
                            weathertitle = "Thời tiết đất liền 24H";
                            break;
                        case MeteorWeatherType.ThoiTietBien24H:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/80/13/Default.aspx";
                            type = 1;
                            weathertitle = "Thời tiết biển 24H";
                            break;
                        case MeteorWeatherType.DuBao10Ngay:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/70/15/Default.aspx";
                            type = 2;
                            weathertitle = "Dự báo 10 ngày";
                            break;
                        case MeteorWeatherType.DuBaoThang:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/70/40/Default.aspx";
                            weathertitle = "Dự báo tháng";
                            type = 2;
                            break;
                        default:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/70/16/Default.aspx";
                            type = 2;
                            weathertitle = "Dự báo mùa";
                            break;
                    }

                    HtmlWeb web = new HtmlWeb();
                    string result = "";
                    if (type == 1)
                    {
                        HtmlDocument document = web.Load(url);
                        HtmlNode title = document.DocumentNode.SelectSingleNode("//td[@class='TitleNews_Special']");

                        result += "<div id='titleMeteor'>";
                        result += title.InnerHtml;
                        result += "<br /><br />";

                        HtmlNode subTitle = document.DocumentNode.SelectSingleNode("//td[@class='SubTitleNews_Special']");
                        result += "<span class='subtitleMeteor'>" + subTitle.InnerHtml + "</span>";
                        result += "<br /><br />";
                        result += "</div>";

                        HtmlNode desc = document.DocumentNode.SelectSingleNode("//table[@id='_ctl1__ctl1__ctl0_dl_Bantindubao']");

                        result += desc.OuterHtml;
                        result = result.Replace("src=\"/", "src=\"http://www.nchmf.gov.vn/");
                    }
                    else
                    {
                        HtmlDocument document = web.Load(url);
                        HtmlNode title = document.DocumentNode.SelectSingleNode("//td[@class='TitleNews_Special']");

                        result += "<div id='Meteor'>";
                        result += "<span class='title'>" + title.InnerHtml + "</span>";

                        HtmlNode SummryNews = document.DocumentNode.SelectSingleNode("//td[@class='SummryNews']");
                        result += SummryNews.InnerHtml;
                        result += "<br /><br />";

                        HtmlNode desc = document.DocumentNode.SelectSingleNode("//td[@class='ContentNews']");

                        result += desc.OuterHtml;
                        result = result.Replace("src=\"/", "src=\"http://www.nchmf.gov.vn/");
                        result += "</div>";
                    }

                    result = HttpUtility.HtmlEncode(result);
                    //Lưu vào database 
                    if (htmlContent != result)
                    {
                        Item item = new Item();
                        item.ModuleID = moduleID;
                        item.Title = weathertitle;
                        item.WeatherType = weatherType.ToString();
                        item.HtmlContent = result;
                        item.CreatedDate = DateTime.Now;
                        item.CreatedBy = "weather@asp.net.vn";
                        item.Insert();
                        htmlContent = result;
                    }
                }
                catch (Exception)
                {

                }
            }
            return htmlContent;
        }
    }
}
